namespace security_PointerSub {
void test() {
	int a, b, c[10], d[10];
	int x = &c[3] - &c[1];
	x = &d[4] - &c[1]; // warn: 'c' and 'd' are different arrays
	x = (&a + 1) - &a;
	x = &b - &a; // warn: 'a' and 'b' are different variables
}

struct S {
	int x[10];
	int y[10];
};

void test1() {
	struct S a[10];
	struct S b;
	int d = &a[4] - &a[6];
	d = &a[0].x[3] - &a[0].x[1];
	d = a[0].y - a[0].x; // warn: 'S.b' and 'S.a' are different objects
	d = (char*)&b.y - (char*)&b.x; // warn: different members of the same object
	d = (char*)&b.y - (char*)&b; // warn: object of type S is not the same array as a member of it
}
}